`include "chunjun_define.sv" 
`include "chunjun_lib_define.sv" 
 
//================================================================================================
// File Name   : wing_cbb_ecc_enc32.sv
// Create Time : Mon Nov 27 20:37:30 2023
// Description :
// 
//  ECC encoder for 32 bit SEC-DED
//================================================================================================

module wing_cbb_ecc_enc32 (
    input  logic [31:0] data_i, 
    output logic [ 6:0] enc_o
);

assign enc_o[0] = data_i[0] ^ data_i[1] ^ data_i[2] ^ data_i[3] ^ data_i[4] ^ data_i[5] ^ data_i[6] ^ data_i[7] ^ data_i[8] ^ data_i[13] ^ data_i[17] ^ data_i[26] ^ data_i[27] ^ data_i[29];
assign enc_o[1] = data_i[0] ^ data_i[1] ^ data_i[2] ^ data_i[3] ^ data_i[4] ^ data_i[12] ^ data_i[16] ^ data_i[18] ^ data_i[21] ^ data_i[22] ^ data_i[23] ^ data_i[24] ^ data_i[25] ^ data_i[28];
assign enc_o[2] = data_i[0] ^ data_i[5] ^ data_i[6] ^ data_i[7] ^ data_i[8] ^ data_i[11] ^ data_i[15] ^ data_i[18] ^ data_i[19] ^ data_i[21] ^ data_i[22] ^ data_i[30] ^ data_i[31];
assign enc_o[3] = data_i[1] ^ data_i[5] ^ data_i[10] ^ data_i[14] ^ data_i[18] ^ data_i[19] ^ data_i[20] ^ data_i[23] ^ data_i[24] ^ data_i[26] ^ data_i[27] ^ data_i[28] ^ data_i[29] ^ data_i[30];
assign enc_o[4] = data_i[2] ^ data_i[6] ^ data_i[9] ^ data_i[14] ^ data_i[15] ^ data_i[16] ^ data_i[17] ^ data_i[19] ^ data_i[20] ^ data_i[21] ^ data_i[23] ^ data_i[25] ^ data_i[29] ^ data_i[31];
assign enc_o[5] = data_i[3] ^ data_i[7] ^ data_i[9] ^ data_i[10] ^ data_i[11] ^ data_i[12] ^ data_i[13] ^ data_i[20] ^ data_i[22] ^ data_i[24] ^ data_i[25] ^ data_i[27] ^ data_i[31];
assign enc_o[6] = data_i[4] ^ data_i[8] ^ data_i[9] ^ data_i[10] ^ data_i[11] ^ data_i[12] ^ data_i[13] ^ data_i[14] ^ data_i[15] ^ data_i[16] ^ data_i[17] ^ data_i[26] ^ data_i[28] ^ data_i[30];
 
endmodule
`include "chunjun_undefine.sv" 
